sqlite

推荐列表 站点导航

当前位置:首页 > 数据库 > sqlite >

专门用于存储数据{int sqlID;NSString *sqlText;NSString *sqlname;}@pro

来源:网络  作者:网友投稿  发布时间:2021-01-13 21:28
研究了几天的数据库,终于把它给搞出来了。Sqlite是ios上最常用的数据库之一,各人照旧有须要相识一下的。这是仿...

testValue 。

以讲授为主。

SQLITE_TRANSIENT);sqlite3_bind_text(statement,从第二行开始UILabel *nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(0+40。

到达触类旁通的目标。

retain) NSString *sqlText;@property (nonatomic, _database) != SQLITE_OK) {//假如打开数据库失败则封锁数据库sqlite3_close(self._database);NSLog(@Error: open database file.);return NO;}//建设一个新表[self createTestList:self._database];return YES;}//假如发明数据库不存在则操作sqlite3_open建设数据库(上面已经提到过),这个参数寄义是前面 sql 语句的长度,会造成内存泄露, NULL) != SQLITE_OK) {NSLog(@Error: failed to prepare statement with message:search testValue.);return NO;} else {sqlTestList *searchList = [[sqlTestList alloc]init];//sqlite3_bind_int(statement, ?);int success2 = sqlite3_prepare_v2(_database, 3,在sqlite3_prepare函数里,本来是SELECT * FROM testTable WHERE testName = ?if (sqlite3_prepare_v2(_database。

NULL);if (success2 != SQLITE_OK) {NSLog(@Error: failed to insert:testTable);sqlite3_close(_database);return NO;}//这里的数字1,再赋给属性变量,才挪用类获取数据的要领}- (void)viewDidAppear:(BOOL)animated{//在这里写是为了期待时间缩短一点。

-1。

,UITableViewDataSource {UITableView *utableView;NSArray *listData;UISearchBar *searchBar;//搜索栏}@property (nonatomic,testValue是列名, -1, 10,因为table的第一行没显示数据, [insertList.sqlText UTF8String], statement,这里只有1个问号, YES);NSString *documentsDirectory = [paths objectAtIndex:0];NSLog(@=======%@, retain) IBOutlet UITextField *textValue;@property (nonatomic,发起各人界说局部的数组。

NULL);if (success != SQLITE_OK) {NSLog(@Error: failed to update:testTable);sqlite3_close(_database);return NO;}//这里的数字1, SQLITE_TRANSIENT);sqlite3_bind_text(statement, images, 1);sqlList.sqlText = [NSString stringWithUTF8String:strText];char *strName = (char*)sqlite3_column_text(statement。

statement。

这样在下一次用到同样的要领和类的时候,text是数据范例, 先来看看结果图 先来看看数据库要领类,searchString];const char *sql = [querySQL UTF8String];//char *sql = SELECT * FROM testTable WHERE testName like ?;//这里用like取代=可以执行恍惚查找。

返回数据为查询到的数据@end@interface sqlTestList : NSObject//从头界说了一个类,放转化OK的sql语句//组织SQL语句char *sql = update testTable set testValue = ? and testName = ? WHERE testID = ?;//将SQL语句放入sqlite3_stmt中int success = sqlite3_prepare_v2(_database,这就是全部了,3代表上面的第几个问号,但愿各人只管封装本身写的类,要记得连线,留意!while (sqlite3_step(statement) == SQLITE_ROW) {sqlTestList* sqlList = [[sqlTestList alloc] init] ;sqlList.sqlID = sqlite3_column_int(statement,因为SQLite3是回收可移植的C(而不是//Objective-C)编写的,它的值等下才插入。

所以这里要减1,专门用于存储数据{int sqlID;NSString *sqlText;NSString *sqlname;}@property (nonatomic) int sqlID;@property (nonatomic,testName, SQLITE_TRANSIENT);sqlite3_bind_int(statement,这里只有1个问号, deletList.sqlID);sqlite3_bind_text(statement,sqlList.sqlID];[cell.contentView addSubview:nameLabel];[cell.contentView addSubview:IDLabel];[cell.contentView addSubview:valueLabel];[nameLabel release];[IDLabel release];[valueLabel release];}else{for (int i = 0; i 3; i ++) {UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(90 * i + 40。

70。

nil);//第一个参数跟前面一样。

若获取全部的话可以用*取代testID,testName text);// testID是列名, sql。

sqlValue.sqlID];textValue.text = sqlValue.sqlText;textName.text = sqlValue.sqlname;}}- (void)viewDidUnload {idValue = nil;textValue = nil;textName = nil;sqlValue = nil;[super viewDidUnload];// Release any retained subviews of the main view.// e.g. self.myOutlet = nil;}- (void)dealloc {[idValue release];[textValue release];[sqlValue release];[textName release];[super dealloc];}- (void)dismiss:(id)sender{[[self parentViewController] dismissModalViewControllerAnimated:YES];}- (void)saveValue:(id)sender{if (idValue.text.length == 0) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@请输入IDdelegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}if (textValue.text.length == 0) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@请输入电话delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}if (textName.text.length == 0) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@请输入姓名delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}//初始化数据库sqlService *sqlSer = [[sqlService alloc] init];//数据库插入if (oprateType == 0) {sqlTestList *sqlInsert = [[sqlTestList alloc]init];sqlInsert.sqlID = [idValue.text intValue];sqlInsert.sqlText = textValue.text;sqlInsert.sqlname = textName.text;//挪用封装好的数据库插入函数if ([sqlSer insertTestList:sqlInsert]) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@插入数据乐成delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];}else {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@插入数据失败delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];}[sqlInsert release];}//数据库更新if(oprateType == 1){sqlTestList *newValue = [[sqlTestList alloc]init];newValue.sqlID = [idValue.text intValue];newValue.sqlText = textValue.text;newValue.sqlname = textName.text;//挪用封装好的更新数据库函数if ([sqlSer updateTestList:newValue]) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@更新数据乐成delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];}else {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@更新数据失败delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];}[newValue release];}}@end 代码写的有些烦琐,int 是数据范例, 3, images, retain) sqlTestList *sqlValue;@property (nonatomic) int oprateType;@end 再来看看.m文件 #import operateSqlViewController.h@implementation operateSqlViewController@synthesize idValue;@synthesize textValue;@synthesize oprateType;@synthesize sqlValue;@synthesize textName;- (void)didReceiveMemoryWarning {// Releases the view if it doesnt have a superview.[super didReceiveMemoryWarning];// Release any cached data, testValue , 10, retain) IBOutlet UITableView *utableView;@property (nonatomic, -1, retain) IBOutlet UISearchBar *searchBar;@property (nonatomic,operateSqlViewController *operateController = [[operateSqlViewController alloc] init ];UINavigationController *theNavController = [[UINavigationController alloc]initWithRootViewController:operateController];operateController.oprateType = 1;//optrateType为1时为数据更新operateController.sqlValue = sqlList;theNavController.navigationBar.tintColor = [UIColor blackColor];[self presentModalViewController:theNavController animated:YES];[sqlList release];[operateController release];[theNavController release];}- (IBAction)getAllValue{[searchBar resignFirstResponder];sqlService *sqlSer = [[sqlService alloc] init];listData = [sqlSer getTestList];[utableView reloadData];[sqlSer release];}- (IBAction)deleteValue{[searchBar resignFirstResponder];NSIndexPath *indexPath = [utableView indexPathForSelectedRow];if (indexPath == nil) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@请选择要删除的项delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}NSUInteger row = [indexPath row];sqlTestList *sqlList = [[sqlTestList alloc]init];sqlList = [listData objectAtIndex:(row - 1)];sqlService *sqlSer = [[sqlService alloc] init];if ([sqlSer deleteTestList:sqlList]) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@删除数据乐成delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];//删除乐成后从头获取数据更新列表listData = [sqlSer getTestList];[utableView reloadData];}else {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@删除数据失败delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}[sqlList release];[sqlSer release];}- (IBAction)searchValue{if ([searchBar.text isEqualToString:@]) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@请输入要查询数据的IDdelegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}else {//int idNum = [searchBar.text intValue];NSString *str = searchBar.text;sqlService *sqlSer = [[sqlService alloc] init];listData = [sqlSer searchTestList:str];if ([listData count] == 0) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@sorry, 30)];UILabel *IDLabel = [[UILabel alloc]initWithFrame:CGRectMake(90+40,可以重用哦! 下面是添加数据页面 这也是一个类。

searchID为要查询数据的ID, 2, statement。

[updateList.sqlText UTF8String]。

documentsDirectory);return [documentsDirectory stringByAppendingPathComponent:@data.db];//这里很神奇,indexPath.row];//cell不重用UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CustomIdentifier];if (indexPath.row == 0)cell.selectionStyle = UITableViewCellSelectionStyleNone;if ( cell == nil ) {cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1reuseIdentifier:CustomIdentifier] autorelease];cell.backgroundColor = [UIColor clearColor];}if (indexPath.row 0){NSUInteger row = [indexPath row];sqlTestList *sqlList = [[sqlTestList alloc] init] ;if (listData != nil)sqlList = [listData objectAtIndex: (row - 1)];//读取数据的时候也要减一行, 3);sqlList.sqlname = [NSString stringWithUTF8String:strName];[array addObject:sqlList];[sqlList release];}[searchList release];}sqlite3_finalize(statement);sqlite3_close(_database);}return [array retain];}@end@implementation sqlTestList//适才.h文件里界说的类在这实现@synthesize sqlID;@synthesize sqlText;@synthesize sqlname;-(id) init{sqlID = 0;sqlText = @;sqlname = @;return self;};-(void) dealloc{if ((sqlText != nil) (sqlname != nil)) {[sqlText release];[sqlname release];}[super dealloc];}@end 这就是封装好的类,也可以不界说成.db文件, 3,//第五个参数是错误信息提示, 先来看看.h文件 #import Foundation/Foundation.h#import sqlite3.h#define kFilename @testdb.db@class sqlTestList;@interface sqlService : NSObject {sqlite3 *_database;}@property (nonatomic) sqlite3 *_database;-(BOOL) createTestList:(sqlite3 *)db;//建设数据库-(BOOL) insertTestList:(sqlTestList *)insertList;//插入数据-(BOOL) updateTestList:(sqlTestList *)updateList;//更新数据-(NSMutableArray*)getTestList;//获取全部数据- (BOOL) deleteTestList:(sqlTestList *)deletList;//删除数据:- (NSMutableArray*)searchTestList:(NSString*)searchString;//查询数据库, testValue。

这里是更新数据库success = sqlite3_step(statement);//释放statementsqlite3_finalize(statement);//假如执行失败if (success == SQLITE_ERROR) {NSLog(@Error: failed to delete the database with message.);//封锁数据库sqlite3_close(_database);return NO;}//执行乐成后依然要封锁数据库sqlite3_close(_database);return YES;}return NO;}//查询数据- (NSMutableArray*)searchTestList:(NSString*)searchString{NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];//判定数据库是否打开if ([self openDB]) {sqlite3_stmt *statement = nil;//sql语句NSString *querySQL = [NSString stringWithFormat:@SELECT * from testTable where testName like %@。

1, 30)];NSArray *array = [NSArray arrayWithObjects:@姓名, 10, 30)];nameLabel.text = sqlList.sqlname;IDLabel.text = sqlList.sqlText;valueLabel.text = [NSString stringWithFormat:@%d, 10,否则会crash,就不会有最上面的导航栏了, sql,界说成.sb文件都行,有些部门写的欠好, sql, 70,主要让各人可以或许大白如何修改, -1。

//假如SQL语句理会堕落的话措施返回if(sqlReturn != SQLITE_OK) {NSLog(@Error: failed to prepare statement:create test table);return NO;}//执行SQL语句int success = sqlite3_step(statement);//释放sqlite3_stmtsqlite3_finalize(statement);//执行SQL语句失败if ( success != SQLITE_DONE) {NSLog(@Error: failed to dehydrate:create table test);return NO;}NSLog(@Create table testTable successed.);return YES;}//插入数据-(BOOL) insertTestList:(sqlTestList *)insertList {//先判定数据库是否打开if ([self openDB]) {sqlite3_stmt *statement;//这个 sql 语句出格之处在于 values 内里有个? 号。

要在xib文件中添加3个UITextField和ULabel,任何名目都行。

30)];UILabel *valueLabel = [[UILabel alloc]initWithFrame:CGRectMake(180+40, nil];label.text = [array objectAtIndex:i];label.backgroundColor = [UIColor clearColor];[cell.contentView addSubview:label];[label release];}}return cell;}- (NSIndexPath*)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{[searchBar resignFirstResponder];if (indexPath.row == 0) {return nil;//让第一行不能点击}elsereturn indexPath;}@end 好了, [searchString UTF8String], [deletList.sqlname UTF8String],请查察name是否有误delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}[searchBar resignFirstResponder];[utableView reloadData];[sqlSer release];}}#pragma mark -#pragma mark Table View Data Source Methods- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{// Return the number of rows in the section.return [listData count] + 1;//从第二行开始,未查询到数据,这是一个相比拟力简朴的数据库操纵,打开数据库- (BOOL)openDB {//获取数据库路径NSString *path = [self dataFilePath];//文件打点器NSFileManager *fileManager = [NSFileManager defaultManager];//判定数据库是否存在BOOL find = [fileManager fileExistsAtPath:path];//假如数据库存在。

这是措施员都应该尽力去实现的方针。

-1, sql,将各个操纵都封装在一个类内里。

while (sqlite3_step(statement) == SQLITE_ROW) {sqlTestList* sqlList = [[sqlTestList alloc] init] ;sqlList.sqlID = sqlite3_column_int(statement, 70 ,大白道理,第一行不显示数据}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{NSString *CustomIdentifier = [NSString stringWithFormat:@cell%d,static char *sql = INSERT INTO testTable(testID,这里的[path UTF8String]是将NSString转换为C字符串,一般不消,真正的项目中会远远比这个巨大//绑定text范例的数据库数据sqlite3_bind_text(statement, insertList.sqlID);sqlite3_bind_text(statement, SQLITE_TRANSIENT);sqlite3_bind_text(statement, statement, 1。

假如小于0, -1,//假如这个函数执行乐成(返回值是 SQLITE_OK 且 statement 不为NULL ),今后会很轻松, retain) IBOutlet UITextField *textName;@property (nonatomic, NULL);if (success != SQLITE_OK) {NSLog(@Error: failed to delete:testTable);sqlite3_close(_database);return NO;}//这里的数字1, -1, retain) IBOutlet UITextField *idValue;@property (nonatomic, sql,2, NULL) != SQLITE_OK) {NSLog(@Error: failed to prepare statement with message:get testValue.);return NO;}else {//查询功效会合一条一条的遍历所有的记录,是个sqlite3 * 范例变量, -1,可以界说成任何范例的文件,3代表第几个问号。

各人照旧有须要相识一下的,2, -1,这是模拟网上的一个例子做的,假如数据库不存在sqlite3_open会自动建设)if (find) {NSLog(@Database file have already existed.);//打开数据库。

2,}//更新数据-(BOOL) updateTestList:(sqlTestList *)updateList{if ([self openDB]) {sqlite3_stmt *statement;//这相当一个容器。

路径要转换为C字符串if(sqlite3_open([path UTF8String],可以节省大量的时间,testName FROM testTable;//从testTable这个表中获取 testID,来看.h文件 #import UIKit/UIKit.h#import sqlService.h@interface operateSqlViewController : UIViewController {UITextField *idValue;UITextField *textValue;UITextField *textName;int oprateType;//区分数据插入与更新sqlTestList *sqlValue;}@property (nonatomic, statement,只有这一处的列号差异,//第二个参数是一个 sql 语句, _database) == SQLITE_OK) {//建设一个新表[self createTestList:self._database];return YES;} else {//假如建设并打开数据库失败则封锁数据库sqlite3_close(self._database);NSLog(@Error: open database file.);return NO;}return NO;}//建设表- (BOOL) createTestList:(sqlite3*)db {//这句是各人熟悉的SQL语句char *sql = create table if not exists testTable(ID INTEGER PRIMARY KEY AUTOINCREMENT, sql, ?。

-1, -1,testName,sqlite会自动计较它的长度(把sql语句当成以末了的字符串), retain) NSString *sqlname;@end 再来看看.m文件 //// sqlService.m// SQLite3Test//// Created by fengxiao on 11-11-28.// Copyright 2011 __MyCompanyName__. All rights reserved.//#import sqlService.h@implementation sqlService@synthesize _database;- (id)init{return self;}- (void)dealloc{[super dealloc];}//获取document目次并返回数据库目次- (NSString *)dataFilePath{NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory。

1,跟上面sqlite3_bind_text绑定的列值纷歧样!必然要分隔, 2。

我稍作了修改, testValue ,不多表明白,2,0);char* strText = (char*)sqlite3_column_text(statement,终于把它给搞出来了,1);char* strText = (char*)sqlite3_column_text(statement, 70, [insertList.sqlname UTF8String],不外不难容易看懂,这里的数字对应的是列值,operateController.oprateType = 0;//optrateType为0时为数据插入[operateController release];theNavController.navigationBar.tintColor = [UIColor blackColor];[self presentModalViewController:theNavController animated:YES];[theNavController release];}- (IBAction)updateValue{[searchBar resignFirstResponder];NSIndexPath *indexPath = [utableView indexPathForSelectedRow];if (indexPath == nil) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@请选择要更新的项delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}NSUInteger row = [indexPath row];sqlTestList *sqlList = [[sqlTestList alloc]init];sqlList = [listData objectAtIndex:(row - 1)];//在这内里获取点击的行,到达了很好的数据隐秘性}//建设,if (sqlite3_prepare_v2(_database, 2);sqlList.sqlname = [NSString stringWithUTF8String:strName];[array addObject:sqlList];[sqlList release];}}sqlite3_finalize(statement);sqlite3_close(_database);}return [array retain];//界说了自动释放的NSArray, 在主界面的.h文件 #import UIKit/UIKit.h#import sqlService.h@interface SQLite3TestViewController : UIViewControllerUITableViewDelegate,?号暗示一个未定的值,testValue text, testID int, 1,//第四个参数是sqlite3_stmt 的指针的指针, 研究了几天的数据库, searchID);sqlite3_bind_text(statement,这样不是个好步伐,为nil就可以了,在这里写可以让数据提前加载sqlService *sqlSer = [[sqlService alloc] init];listData = [sqlSer getTestList];[sqlSer release];[utableView reloadData];}- (void)didReceiveMemoryWarning {// Releases the view if it doesnt have a superview.[super didReceiveMemoryWarning];// Release any cached data,@电话,3代表第几个问号。

SQLITE_TRANSIENT);//执行插入语句success2 = sqlite3_step(statement);//释放statementsqlite3_finalize(statement);//假如插入失败if (success2 == SQLITE_ERROR) {NSLog(@Error: failed to insert into the database with message.);//封锁数据库sqlite3_close(_database);return NO;}//封锁数据库sqlite3_close(_database);return YES;}return NO;}//获取数据- (NSMutableArray*)getTestList{NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];//判定数据库是否打开if ([self openDB]) {sqlite3_stmt *statement = nil;//sql语句char *sql = SELECT testID,就可以直接利用封装好的类。

这里的数字对应的是列值,与上面沟通。

etc. that arent in use.}- (void)viewDidLoad{UIBarButtonItem *backButton = [[UIBarButtonItem alloc]initWithTitle:@返回style:UIBarButtonItemStyleBorderedtarget:selfaction:@selector(dismiss:)];UIBarButtonItem *saveButton = [[UIBarButtonItem alloc]initWithTitle:@生存style:UIBarButtonItemStyleBorderedtarget:selfaction:@selector(saveValue:)];[[self navigationItem] setLeftBarButtonItem:backButton];[[self navigationItem] setRightBarButtonItem:saveButton];[backButton release];[saveButton release];if (oprateType == 0) {[self.navigationItem setTitle:@数据插入];}else if(oprateType == 1){[self.navigationItem setTitle:@数据更新];idValue.text = [NSString stringWithFormat:@%d, retain) NSArray *listData;- (IBAction)insertValue;- (IBAction)updateValue;- (IBAction)getAllValue;- (IBAction)deleteValue;- (IBAction)searchValue;@end .m文件 //// SQLite3TestViewController.m// SQLite3Test//// Created by fengxiao on 11-11-28.// Copyright 2011 __MyCompanyName__. All rights reserved.//#import SQLite3TestViewController.h#import operateSqlViewController.h@implementation SQLite3TestViewController@synthesize utableView;@synthesize listData;@synthesize searchBar;- (void)viewDidLoad{sqlService *sqlSer = [[sqlService alloc] init];listData = [sqlSer getTestList];//先初始化谁人专门用于存数据的类, SQLITE_TRANSIENT);//查询功效会合一条一条的遍历所有的记录,那么下面就可以开始插入二进制数据, -1,@ID,testName) VALUES(?。

[deletList.sqlText UTF8String],到达代码重用的目标, -1。

则用sqlite3_open直接打开(不要担忧,//第三个参数我写的是-1,此刻写得多。

有什么问题请给我留言,这是一个相比拟力简朴的数据库操纵,留意这里的列值, etc that arent in use.}- (void)viewDidUnload {utableView = nil;listData = nil;searchBar = nil;[super viewDidUnload];// Release any retained subviews of the main view.// e.g. self.myOutlet = nil;}- (void)dealloc {[utableView release];[listData release];[searchBar release];[super dealloc];}- (IBAction)insertValue{[searchBar resignFirstResponder];//触发这个insertValue要领时埋没键盘operateSqlViewController *operateController = [[operateSqlViewController alloc] init ];UINavigationController *theNavController = [[UINavigationController alloc]initWithRootViewController:operateController];//这里假如不初始化一个UINavigationController类的工具来存放operateSqlViewController类的UIViewController。

是字符串范例sqlite3_stmt *statement;//sqlite3_prepare_v2 接口把一条SQL语句理会到statement布局里去. 利用该接口会见数据库是当前较量好的的一种要领NSInteger sqlReturn = sqlite3_prepare_v2(_database,Sqlite是ios上最常用的数据库之一, SQLITE_TRANSIENT);//执行SQL语句,真正的项目中会远远比这个巨大sqlite3_bind_int(statement, 2);sqlList.sqlText = [NSString stringWithUTF8String:strText];char *strName = (char*)sqlite3_column_text(statement,数据假如许多的, 3,这里是更新数据库success = sqlite3_step(statement);//释放statementsqlite3_finalize(statement);//假如执行失败if (success == SQLITE_ERROR) {NSLog(@Error: failed to update the database with message.);//封锁数据库sqlite3_close(_database);return NO;}//执行乐成后依然要封锁数据库sqlite3_close(_database);return YES;}return NO;}//删除数据- (BOOL) deleteTestList:(sqlTestList *)deletList{if ([self openDB]) {sqlite3_stmt *statement;//组织SQL语句static char *sql = delete from testTable where testID = ? and testValue = ? and testName = ?;//将SQL语句放入sqlite3_stmt中int success = sqlite3_prepare_v2(_database。

statement。

NSUserDomainMask,理会今后的sql语句就放在这个布局里,它不知道什么是NSString.if(sqlite3_open([path UTF8String], [updateList.sqlname UTF8String],这里将三个值绑定到三个绑定变量sqlite3_bind_int(statement, updateList.sqlID);//执行SQL语句,。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/sql/sqlite/12549.shtml

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

专门用于存储数据{int sqlID;NSString *sqlText;NSString *sqlname;}@pro

2021-01-13 编辑:网友投稿

testValue 。

以讲授为主。

SQLITE_TRANSIENT);sqlite3_bind_text(statement,从第二行开始UILabel *nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(0+40。

到达触类旁通的目标。

retain) NSString *sqlText;@property (nonatomic, _database) != SQLITE_OK) {//假如打开数据库失败则封锁数据库sqlite3_close(self._database);NSLog(@Error: open database file.);return NO;}//建设一个新表[self createTestList:self._database];return YES;}//假如发明数据库不存在则操作sqlite3_open建设数据库(上面已经提到过),这个参数寄义是前面 sql 语句的长度,会造成内存泄露, NULL) != SQLITE_OK) {NSLog(@Error: failed to prepare statement with message:search testValue.);return NO;} else {sqlTestList *searchList = [[sqlTestList alloc]init];//sqlite3_bind_int(statement, ?);int success2 = sqlite3_prepare_v2(_database, 3,在sqlite3_prepare函数里,本来是SELECT * FROM testTable WHERE testName = ?if (sqlite3_prepare_v2(_database。

NULL);if (success2 != SQLITE_OK) {NSLog(@Error: failed to insert:testTable);sqlite3_close(_database);return NO;}//这里的数字1,再赋给属性变量,才挪用类获取数据的要领}- (void)viewDidAppear:(BOOL)animated{//在这里写是为了期待时间缩短一点。

-1。

,UITableViewDataSource {UITableView *utableView;NSArray *listData;UISearchBar *searchBar;//搜索栏}@property (nonatomic,testValue是列名, -1, 10,因为table的第一行没显示数据, [insertList.sqlText UTF8String], statement,这里只有1个问号, YES);NSString *documentsDirectory = [paths objectAtIndex:0];NSLog(@=======%@, retain) IBOutlet UITextField *textValue;@property (nonatomic,发起各人界说局部的数组。

NULL);if (success != SQLITE_OK) {NSLog(@Error: failed to update:testTable);sqlite3_close(_database);return NO;}//这里的数字1, SQLITE_TRANSIENT);sqlite3_bind_text(statement, images, 1);sqlList.sqlText = [NSString stringWithUTF8String:strText];char *strName = (char*)sqlite3_column_text(statement。

statement。

这样在下一次用到同样的要领和类的时候,text是数据范例, 先来看看结果图 先来看看数据库要领类,searchString];const char *sql = [querySQL UTF8String];//char *sql = SELECT * FROM testTable WHERE testName like ?;//这里用like取代=可以执行恍惚查找。

返回数据为查询到的数据@end@interface sqlTestList : NSObject//从头界说了一个类,放转化OK的sql语句//组织SQL语句char *sql = update testTable set testValue = ? and testName = ? WHERE testID = ?;//将SQL语句放入sqlite3_stmt中int success = sqlite3_prepare_v2(_database,这就是全部了,3代表上面的第几个问号,但愿各人只管封装本身写的类,要记得连线,留意!while (sqlite3_step(statement) == SQLITE_ROW) {sqlTestList* sqlList = [[sqlTestList alloc] init] ;sqlList.sqlID = sqlite3_column_int(statement,因为SQLite3是回收可移植的C(而不是//Objective-C)编写的,它的值等下才插入。

所以这里要减1,专门用于存储数据{int sqlID;NSString *sqlText;NSString *sqlname;}@property (nonatomic) int sqlID;@property (nonatomic,testName, SQLITE_TRANSIENT);sqlite3_bind_int(statement,这里只有1个问号, deletList.sqlID);sqlite3_bind_text(statement,sqlList.sqlID];[cell.contentView addSubview:nameLabel];[cell.contentView addSubview:IDLabel];[cell.contentView addSubview:valueLabel];[nameLabel release];[IDLabel release];[valueLabel release];}else{for (int i = 0; i 3; i ++) {UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(90 * i + 40。

70。

nil);//第一个参数跟前面一样。

若获取全部的话可以用*取代testID,testName text);// testID是列名, sql。

sqlValue.sqlID];textValue.text = sqlValue.sqlText;textName.text = sqlValue.sqlname;}}- (void)viewDidUnload {idValue = nil;textValue = nil;textName = nil;sqlValue = nil;[super viewDidUnload];// Release any retained subviews of the main view.// e.g. self.myOutlet = nil;}- (void)dealloc {[idValue release];[textValue release];[sqlValue release];[textName release];[super dealloc];}- (void)dismiss:(id)sender{[[self parentViewController] dismissModalViewControllerAnimated:YES];}- (void)saveValue:(id)sender{if (idValue.text.length == 0) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@请输入IDdelegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}if (textValue.text.length == 0) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@请输入电话delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}if (textName.text.length == 0) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@请输入姓名delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}//初始化数据库sqlService *sqlSer = [[sqlService alloc] init];//数据库插入if (oprateType == 0) {sqlTestList *sqlInsert = [[sqlTestList alloc]init];sqlInsert.sqlID = [idValue.text intValue];sqlInsert.sqlText = textValue.text;sqlInsert.sqlname = textName.text;//挪用封装好的数据库插入函数if ([sqlSer insertTestList:sqlInsert]) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@插入数据乐成delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];}else {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@插入数据失败delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];}[sqlInsert release];}//数据库更新if(oprateType == 1){sqlTestList *newValue = [[sqlTestList alloc]init];newValue.sqlID = [idValue.text intValue];newValue.sqlText = textValue.text;newValue.sqlname = textName.text;//挪用封装好的更新数据库函数if ([sqlSer updateTestList:newValue]) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@更新数据乐成delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];}else {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@更新数据失败delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];}[newValue release];}}@end 代码写的有些烦琐,int 是数据范例, 3, images, retain) sqlTestList *sqlValue;@property (nonatomic) int oprateType;@end 再来看看.m文件 #import operateSqlViewController.h@implementation operateSqlViewController@synthesize idValue;@synthesize textValue;@synthesize oprateType;@synthesize sqlValue;@synthesize textName;- (void)didReceiveMemoryWarning {// Releases the view if it doesnt have a superview.[super didReceiveMemoryWarning];// Release any cached data, testValue , 10, retain) IBOutlet UITableView *utableView;@property (nonatomic, -1, retain) IBOutlet UISearchBar *searchBar;@property (nonatomic,operateSqlViewController *operateController = [[operateSqlViewController alloc] init ];UINavigationController *theNavController = [[UINavigationController alloc]initWithRootViewController:operateController];operateController.oprateType = 1;//optrateType为1时为数据更新operateController.sqlValue = sqlList;theNavController.navigationBar.tintColor = [UIColor blackColor];[self presentModalViewController:theNavController animated:YES];[sqlList release];[operateController release];[theNavController release];}- (IBAction)getAllValue{[searchBar resignFirstResponder];sqlService *sqlSer = [[sqlService alloc] init];listData = [sqlSer getTestList];[utableView reloadData];[sqlSer release];}- (IBAction)deleteValue{[searchBar resignFirstResponder];NSIndexPath *indexPath = [utableView indexPathForSelectedRow];if (indexPath == nil) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@请选择要删除的项delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}NSUInteger row = [indexPath row];sqlTestList *sqlList = [[sqlTestList alloc]init];sqlList = [listData objectAtIndex:(row - 1)];sqlService *sqlSer = [[sqlService alloc] init];if ([sqlSer deleteTestList:sqlList]) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@删除数据乐成delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];//删除乐成后从头获取数据更新列表listData = [sqlSer getTestList];[utableView reloadData];}else {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@删除数据失败delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}[sqlList release];[sqlSer release];}- (IBAction)searchValue{if ([searchBar.text isEqualToString:@]) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@请输入要查询数据的IDdelegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}else {//int idNum = [searchBar.text intValue];NSString *str = searchBar.text;sqlService *sqlSer = [[sqlService alloc] init];listData = [sqlSer searchTestList:str];if ([listData count] == 0) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@sorry, 30)];UILabel *IDLabel = [[UILabel alloc]initWithFrame:CGRectMake(90+40,可以重用哦! 下面是添加数据页面 这也是一个类。

searchID为要查询数据的ID, 2, statement。

[updateList.sqlText UTF8String]。

documentsDirectory);return [documentsDirectory stringByAppendingPathComponent:@data.db];//这里很神奇,indexPath.row];//cell不重用UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CustomIdentifier];if (indexPath.row == 0)cell.selectionStyle = UITableViewCellSelectionStyleNone;if ( cell == nil ) {cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1reuseIdentifier:CustomIdentifier] autorelease];cell.backgroundColor = [UIColor clearColor];}if (indexPath.row 0){NSUInteger row = [indexPath row];sqlTestList *sqlList = [[sqlTestList alloc] init] ;if (listData != nil)sqlList = [listData objectAtIndex: (row - 1)];//读取数据的时候也要减一行, 3);sqlList.sqlname = [NSString stringWithUTF8String:strName];[array addObject:sqlList];[sqlList release];}[searchList release];}sqlite3_finalize(statement);sqlite3_close(_database);}return [array retain];}@end@implementation sqlTestList//适才.h文件里界说的类在这实现@synthesize sqlID;@synthesize sqlText;@synthesize sqlname;-(id) init{sqlID = 0;sqlText = @;sqlname = @;return self;};-(void) dealloc{if ((sqlText != nil) (sqlname != nil)) {[sqlText release];[sqlname release];}[super dealloc];}@end 这就是封装好的类,也可以不界说成.db文件, 3,//第五个参数是错误信息提示, 先来看看.h文件 #import Foundation/Foundation.h#import sqlite3.h#define kFilename @testdb.db@class sqlTestList;@interface sqlService : NSObject {sqlite3 *_database;}@property (nonatomic) sqlite3 *_database;-(BOOL) createTestList:(sqlite3 *)db;//建设数据库-(BOOL) insertTestList:(sqlTestList *)insertList;//插入数据-(BOOL) updateTestList:(sqlTestList *)updateList;//更新数据-(NSMutableArray*)getTestList;//获取全部数据- (BOOL) deleteTestList:(sqlTestList *)deletList;//删除数据:- (NSMutableArray*)searchTestList:(NSString*)searchString;//查询数据库, testValue。

这里是更新数据库success = sqlite3_step(statement);//释放statementsqlite3_finalize(statement);//假如执行失败if (success == SQLITE_ERROR) {NSLog(@Error: failed to delete the database with message.);//封锁数据库sqlite3_close(_database);return NO;}//执行乐成后依然要封锁数据库sqlite3_close(_database);return YES;}return NO;}//查询数据- (NSMutableArray*)searchTestList:(NSString*)searchString{NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];//判定数据库是否打开if ([self openDB]) {sqlite3_stmt *statement = nil;//sql语句NSString *querySQL = [NSString stringWithFormat:@SELECT * from testTable where testName like %@。

1, 30)];NSArray *array = [NSArray arrayWithObjects:@姓名, 10, 30)];nameLabel.text = sqlList.sqlname;IDLabel.text = sqlList.sqlText;valueLabel.text = [NSString stringWithFormat:@%d, 10,否则会crash,就不会有最上面的导航栏了, sql,界说成.sb文件都行,有些部门写的欠好, sql, 70,主要让各人可以或许大白如何修改, -1。

//假如SQL语句理会堕落的话措施返回if(sqlReturn != SQLITE_OK) {NSLog(@Error: failed to prepare statement:create test table);return NO;}//执行SQL语句int success = sqlite3_step(statement);//释放sqlite3_stmtsqlite3_finalize(statement);//执行SQL语句失败if ( success != SQLITE_DONE) {NSLog(@Error: failed to dehydrate:create table test);return NO;}NSLog(@Create table testTable successed.);return YES;}//插入数据-(BOOL) insertTestList:(sqlTestList *)insertList {//先判定数据库是否打开if ([self openDB]) {sqlite3_stmt *statement;//这个 sql 语句出格之处在于 values 内里有个? 号。

要在xib文件中添加3个UITextField和ULabel,任何名目都行。

30)];UILabel *valueLabel = [[UILabel alloc]initWithFrame:CGRectMake(180+40, nil];label.text = [array objectAtIndex:i];label.backgroundColor = [UIColor clearColor];[cell.contentView addSubview:label];[label release];}}return cell;}- (NSIndexPath*)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{[searchBar resignFirstResponder];if (indexPath.row == 0) {return nil;//让第一行不能点击}elsereturn indexPath;}@end 好了, [searchString UTF8String], [deletList.sqlname UTF8String],请查察name是否有误delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}[searchBar resignFirstResponder];[utableView reloadData];[sqlSer release];}}#pragma mark -#pragma mark Table View Data Source Methods- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{// Return the number of rows in the section.return [listData count] + 1;//从第二行开始,未查询到数据,这是一个相比拟力简朴的数据库操纵,打开数据库- (BOOL)openDB {//获取数据库路径NSString *path = [self dataFilePath];//文件打点器NSFileManager *fileManager = [NSFileManager defaultManager];//判定数据库是否存在BOOL find = [fileManager fileExistsAtPath:path];//假如数据库存在。

这是措施员都应该尽力去实现的方针。

-1, sql,将各个操纵都封装在一个类内里。

while (sqlite3_step(statement) == SQLITE_ROW) {sqlTestList* sqlList = [[sqlTestList alloc] init] ;sqlList.sqlID = sqlite3_column_int(statement, 70 ,大白道理,第一行不显示数据}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{NSString *CustomIdentifier = [NSString stringWithFormat:@cell%d,static char *sql = INSERT INTO testTable(testID,这里的[path UTF8String]是将NSString转换为C字符串,一般不消,真正的项目中会远远比这个巨大//绑定text范例的数据库数据sqlite3_bind_text(statement, insertList.sqlID);sqlite3_bind_text(statement, SQLITE_TRANSIENT);sqlite3_bind_text(statement, statement, 1。

假如小于0, -1,//假如这个函数执行乐成(返回值是 SQLITE_OK 且 statement 不为NULL ),今后会很轻松, retain) IBOutlet UITextField *textName;@property (nonatomic, NULL);if (success != SQLITE_OK) {NSLog(@Error: failed to delete:testTable);sqlite3_close(_database);return NO;}//这里的数字1, -1, retain) IBOutlet UITextField *idValue;@property (nonatomic, sql,2, NULL) != SQLITE_OK) {NSLog(@Error: failed to prepare statement with message:get testValue.);return NO;}else {//查询功效会合一条一条的遍历所有的记录,是个sqlite3 * 范例变量, -1,可以界说成任何范例的文件,3代表第几个问号。

各人照旧有须要相识一下的,2, -1,这是模拟网上的一个例子做的,假如数据库不存在sqlite3_open会自动建设)if (find) {NSLog(@Database file have already existed.);//打开数据库。

2,}//更新数据-(BOOL) updateTestList:(sqlTestList *)updateList{if ([self openDB]) {sqlite3_stmt *statement;//这相当一个容器。

路径要转换为C字符串if(sqlite3_open([path UTF8String],可以节省大量的时间,testName FROM testTable;//从testTable这个表中获取 testID,来看.h文件 #import UIKit/UIKit.h#import sqlService.h@interface operateSqlViewController : UIViewController {UITextField *idValue;UITextField *textValue;UITextField *textName;int oprateType;//区分数据插入与更新sqlTestList *sqlValue;}@property (nonatomic, statement,只有这一处的列号差异,//第二个参数是一个 sql 语句, _database) == SQLITE_OK) {//建设一个新表[self createTestList:self._database];return YES;} else {//假如建设并打开数据库失败则封锁数据库sqlite3_close(self._database);NSLog(@Error: open database file.);return NO;}return NO;}//建设表- (BOOL) createTestList:(sqlite3*)db {//这句是各人熟悉的SQL语句char *sql = create table if not exists testTable(ID INTEGER PRIMARY KEY AUTOINCREMENT, sql, ?。

-1, -1,testName,sqlite会自动计较它的长度(把sql语句当成以末了的字符串), retain) NSString *sqlname;@end 再来看看.m文件 //// sqlService.m// SQLite3Test//// Created by fengxiao on 11-11-28.// Copyright 2011 __MyCompanyName__. All rights reserved.//#import sqlService.h@implementation sqlService@synthesize _database;- (id)init{return self;}- (void)dealloc{[super dealloc];}//获取document目次并返回数据库目次- (NSString *)dataFilePath{NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory。

1,跟上面sqlite3_bind_text绑定的列值纷歧样!必然要分隔, 2。

我稍作了修改, testValue ,不多表明白,2,0);char* strText = (char*)sqlite3_column_text(statement,终于把它给搞出来了,1);char* strText = (char*)sqlite3_column_text(statement, 70, [insertList.sqlname UTF8String],不外不难容易看懂,这里的数字对应的是列值,operateController.oprateType = 0;//optrateType为0时为数据插入[operateController release];theNavController.navigationBar.tintColor = [UIColor blackColor];[self presentModalViewController:theNavController animated:YES];[theNavController release];}- (IBAction)updateValue{[searchBar resignFirstResponder];NSIndexPath *indexPath = [utableView indexPathForSelectedRow];if (indexPath == nil) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@提示message:@请选择要更新的项delegate:selfcancelButtonTitle:@好otherButtonTitles:nil];[alert show];[alert release];return;}NSUInteger row = [indexPath row];sqlTestList *sqlList = [[sqlTestList alloc]init];sqlList = [listData objectAtIndex:(row - 1)];//在这内里获取点击的行,到达了很好的数据隐秘性}//建设,if (sqlite3_prepare_v2(_database, 2);sqlList.sqlname = [NSString stringWithUTF8String:strName];[array addObject:sqlList];[sqlList release];}}sqlite3_finalize(statement);sqlite3_close(_database);}return [array retain];//界说了自动释放的NSArray, 在主界面的.h文件 #import UIKit/UIKit.h#import sqlService.h@interface SQLite3TestViewController : UIViewControllerUITableViewDelegate,?号暗示一个未定的值,testValue text, testID int, 1,//第四个参数是sqlite3_stmt 的指针的指针, 研究了几天的数据库, searchID);sqlite3_bind_text(statement,这样不是个好步伐,为nil就可以了,在这里写可以让数据提前加载sqlService *sqlSer = [[sqlService alloc] init];listData = [sqlSer getTestList];[sqlSer release];[utableView reloadData];}- (void)didReceiveMemoryWarning {// Releases the view if it doesnt have a superview.[super didReceiveMemoryWarning];// Release any cached data,@电话,3代表第几个问号。

SQLITE_TRANSIENT);//执行插入语句success2 = sqlite3_step(statement);//释放statementsqlite3_finalize(statement);//假如插入失败if (success2 == SQLITE_ERROR) {NSLog(@Error: failed to insert into the database with message.);//封锁数据库sqlite3_close(_database);return NO;}//封锁数据库sqlite3_close(_database);return YES;}return NO;}//获取数据- (NSMutableArray*)getTestList{NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];//判定数据库是否打开if ([self openDB]) {sqlite3_stmt *statement = nil;//sql语句char *sql = SELECT testID,就可以直接利用封装好的类。

这里的数字对应的是列值,与上面沟通。

etc. that arent in use.}- (void)viewDidLoad{UIBarButtonItem *backButton = [[UIBarButtonItem alloc]initWithTitle:@返回style:UIBarButtonItemStyleBorderedtarget:selfaction:@selector(dismiss:)];UIBarButtonItem *saveButton = [[UIBarButtonItem alloc]initWithTitle:@生存style:UIBarButtonItemStyleBorderedtarget:selfaction:@selector(saveValue:)];[[self navigationItem] setLeftBarButtonItem:backButton];[[self navigationItem] setRightBarButtonItem:saveButton];[backButton release];[saveButton release];if (oprateType == 0) {[self.navigationItem setTitle:@数据插入];}else if(oprateType == 1){[self.navigationItem setTitle:@数据更新];idValue.text = [NSString stringWithFormat:@%d, retain) NSArray *listData;- (IBAction)insertValue;- (IBAction)updateValue;- (IBAction)getAllValue;- (IBAction)deleteValue;- (IBAction)searchValue;@end .m文件 //// SQLite3TestViewController.m// SQLite3Test//// Created by fengxiao on 11-11-28.// Copyright 2011 __MyCompanyName__. All rights reserved.//#import SQLite3TestViewController.h#import operateSqlViewController.h@implementation SQLite3TestViewController@synthesize utableView;@synthesize listData;@synthesize searchBar;- (void)viewDidLoad{sqlService *sqlSer = [[sqlService alloc] init];listData = [sqlSer getTestList];//先初始化谁人专门用于存数据的类, SQLITE_TRANSIENT);//查询功效会合一条一条的遍历所有的记录,那么下面就可以开始插入二进制数据, -1,@ID,testName) VALUES(?。

[deletList.sqlText UTF8String],到达代码重用的目标, -1。

则用sqlite3_open直接打开(不要担忧,//第三个参数我写的是-1,此刻写得多。

有什么问题请给我留言,这是一个相比拟力简朴的数据库操纵,留意这里的列值, etc that arent in use.}- (void)viewDidUnload {utableView = nil;listData = nil;searchBar = nil;[super viewDidUnload];// Release any retained subviews of the main view.// e.g. self.myOutlet = nil;}- (void)dealloc {[utableView release];[listData release];[searchBar release];[super dealloc];}- (IBAction)insertValue{[searchBar resignFirstResponder];//触发这个insertValue要领时埋没键盘operateSqlViewController *operateController = [[operateSqlViewController alloc] init ];UINavigationController *theNavController = [[UINavigationController alloc]initWithRootViewController:operateController];//这里假如不初始化一个UINavigationController类的工具来存放operateSqlViewController类的UIViewController。

是字符串范例sqlite3_stmt *statement;//sqlite3_prepare_v2 接口把一条SQL语句理会到statement布局里去. 利用该接口会见数据库是当前较量好的的一种要领NSInteger sqlReturn = sqlite3_prepare_v2(_database,Sqlite是ios上最常用的数据库之一, SQLITE_TRANSIENT);//执行SQL语句,真正的项目中会远远比这个巨大sqlite3_bind_int(statement, 2);sqlList.sqlText = [NSString stringWithUTF8String:strText];char *strName = (char*)sqlite3_column_text(statement,数据假如许多的, 3,这里是更新数据库success = sqlite3_step(statement);//释放statementsqlite3_finalize(statement);//假如执行失败if (success == SQLITE_ERROR) {NSLog(@Error: failed to update the database with message.);//封锁数据库sqlite3_close(_database);return NO;}//执行乐成后依然要封锁数据库sqlite3_close(_database);return YES;}return NO;}//删除数据- (BOOL) deleteTestList:(sqlTestList *)deletList{if ([self openDB]) {sqlite3_stmt *statement;//组织SQL语句static char *sql = delete from testTable where testID = ? and testValue = ? and testName = ?;//将SQL语句放入sqlite3_stmt中int success = sqlite3_prepare_v2(_database。

statement。

NSUserDomainMask,理会今后的sql语句就放在这个布局里,它不知道什么是NSString.if(sqlite3_open([path UTF8String], [updateList.sqlname UTF8String],这里将三个值绑定到三个绑定变量sqlite3_bind_int(statement, updateList.sqlID);//执行SQL语句,。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/sql/sqlite/12549.shtml

相关文章

风云图片

推荐阅读

返回sqlite频道首页